package ade.prime.service ;

import ade.prime.model.Lesson ;
import ade.prime.model.Lessons ;
import ade.prime.model.LessonType ;
import ade.prime.model.Project ;
import ade.prime.model.Resource ;
import ade.prime.model.Schedule ;
import ade.prime.model.ScheduleState ;

import ade.prime.service.AdeWebServiceListener ;

interface AdeWebServiceApi {

/**
 * Adds a listener to this service.
 * 
 * @return	Identifier of the added listener
 */
int addListener(AdeWebServiceListener listener) ;


/**
 * Removes a listener to this service.
 */
void removeListener(int listenerId) ;

/**
 *
 */
Schedule createSchedule(String name, in Resource[] resources, 
	int period, in Project project) ;

/**
 *
 */
Schedule editSchedule(in Schedule oldSchedule, String name, in Resource[] resources, 
	int period, in Project project) ;

/**
 *
 */
void updateScheduleState(in int scheduleId, in ScheduleState newState) ;

/**
 *
 */
Schedule updateScheduleNotify(in Schedule schedule) ;

/**
 *
 */
void removeSchedule(in Schedule schedule) ;

/**
 *
 */
void updateSchedule(in Schedule schedule) ;

/**
 *
 */
void cancelScheduleUpdate(in Schedule schedule) ;

/**
 *
 */
List<Schedule> getAllSchedules() ;

/**
 *
 */
Schedule getSchedule(int scheduleId) ;

/**
 *
 */
ScheduleState getScheduleState(in Schedule schedule) ;

/**
 *
 */
Lessons getAllScheduleLessons(int scheduleId) ;

/**
 *
 */
Lessons getFutureScheduleLessons(int scheduleId) ;

/**
 *
 */
Lesson getLesson(long lessonId) ;

/**
 *
 */
LessonType getLessonType(in Lesson lesson) ;

/**
 *
 */
Lesson setLessonType(in Lesson lessen, in LessonType type) ;

/**
 *
 */
Project[] getAllProjects() ;

/**
 *
 */
void removeLessonHistory(long lessonId) ;

}